문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 Windows API (문단 편집) === ntdll.dll === 윈도우는 어느 영역에서 하느냐에 따라 커널 모드와 사용자 모드로 나뉜다. 운영체제, 각종 드라이버들은 커널 모드에서 실행되며 일반 프로그램들은 사용자 모드에서 실행된다. 원칙적으로는 일반 프로그램들은 사용자 모드에서 실행되므로 커널 모드에 접근할 수 없다. 따라서 커널에게 이런 작업을 해줄 것을 요청할 수 있으며 이를 [[시스템 콜]]이라고 부른다. 윈도우에서는 ntdll.dll가 이러한 역할을 맡는다. ntdll.dll의 노출된 API 중에서 Nt이나 Zw 접두사를 가진 함수는 시스템 콜을 사용하여 커널에게 처리를 맡는다. Kernel32.dll, Advapi32.dll, KernelBase.dll 등의 시스템 DLL들은 내부적으로 ntdll.dll의 함수를 호출한다. ntdll.dll의 시스템 콜이 실행되면 인터럽트가 발생하여 커널 모드에서 시스템 콜을 확인하고 처리한다. 예를 들어 CloseHandle의 경우 내부적으로 ntdll.dll의 NtClose 함수를 호출하고 커널 모드에서 실제 NtClose 함수가 호출된다. ntdll.dll의 함수들은 대부분 문서화되어 있지 않다. (Windows.h에도 없다!) 사용하기 위해서는 GetModuleHandle 함수로 ntdll.dll의 핸들을 얻어온 뒤 GetProcAddress 함수를 사용하여 함수의 주소를 얻어와서 사용해야 한다. GetModuleHandle와 GetProcAddress 함수를 사용하는 것 외에도 ntdll.lib를 링크하고 사용할 함수를 선언하는 방법도 있다. 다만 ntdll.lib는 Windows SDK에는 없고 WDK(드라이버 개발 키트)에만 있으므로 WDK가 설치되어 있지 않다면 설치하거나 인터넷에서 ntdll.lib를 구해와서 사용해야 한다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기